{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 第三章 回归分析-优化"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import pandas as pd"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 计算代价函数"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "X = [1,2,3,4,5]\n",
    "y = [12.5,9,18,14.9,22]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 随机设置的初始 系数 w\n",
    "# w = [10,2]\n",
    "w = [0.1,0.22]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "X = np.matrix(X).T\n",
    "y = np.matrix(y).T\n",
    "w = np.matrix(w).T"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "matrix([[1],\n",
       "        [2],\n",
       "        [3],\n",
       "        [4],\n",
       "        [5]])"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "X"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "matrix([[12.5],\n",
       "        [ 9. ],\n",
       "        [18. ],\n",
       "        [14.9],\n",
       "        [22. ]])"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "y"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "matrix([[0.1 ],\n",
       "        [0.22]])"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "w"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "((5, 1), (5, 1), (2, 1))"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "X.shape,y.shape,w.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "matrix([[1],\n",
       "        [1],\n",
       "        [1],\n",
       "        [1],\n",
       "        [1]])"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "one_matrix = np.matrix([1]*5).T\n",
    "one_matrix"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "matrix([[1, 1],\n",
       "        [1, 2],\n",
       "        [1, 3],\n",
       "        [1, 4],\n",
       "        [1, 5]])"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "X = np.hstack((one_matrix,X))\n",
    "X"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "((5, 2), (2, 1), (5, 1))"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "X.shape,w.shape,y.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [],
   "source": [
    "def computeCost(X, y,w):      \n",
    "    inner = np.power(((X * w) - y), 2)/2    # ( m,n ) @ ( n, 1 ) -> ( m, 1 )\n",
    "    return np.sum(inner) /  X.shape[0]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "114.3548"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "computeCost(X,y,w)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "matrix([[7.85],\n",
       "        [2.35]])"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 上节课 动画模拟法 得出的 a = 2.35和b = 7.85\n",
    "w_mo = np.matrix([7.85,2.35]).T\n",
    "w_mo"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "3.8785"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "computeCost(X,y,w_mo)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "matrix([[1, 2, 3, 4, 5]])"
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 上节课通过最小二乘公式计算出的a和b\n",
    "X_0 = [1,2,3,4,5]\n",
    "X_1 = np.matrix(X_0)\n",
    "X_1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "matrix([[2.49]])"
      ]
     },
     "execution_count": 17,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "a = (X_1-X_1.mean())*(y-y.mean())/np.sum(np.power(X_1-X_1.mean(),2))\n",
    "a"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "matrix([[7.81]])"
      ]
     },
     "execution_count": 18,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "b = y.mean()-a*X_1.mean()\n",
    "b"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "matrix([[7.81],\n",
       "        [2.49]])"
      ]
     },
     "execution_count": 19,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "w_jisuan = np.matrix([7.81,2.49]).T\n",
    "w_jisuan"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "3.7866999999999975"
      ]
     },
     "execution_count": 20,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "computeCost(X,y,w_jisuan)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 最小二乘法"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [],
   "source": [
    "def LSM(X, y):\n",
    "    w = np.linalg.inv(X.T@X)@X.T@y#X.T@X等价于X.T.dot(X)\n",
    "    return w"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "matrix([[7.81],\n",
       "        [2.49]])"
      ]
     },
     "execution_count": 22,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "w_1sm = LSM(X, y)\n",
    "w_1sm"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "3.7867000000000006"
      ]
     },
     "execution_count": 23,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "computeCost(X,y,w_1sm)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [],
   "source": [
    "from scipy.optimize import curve_fit"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 756,
   "metadata": {
    "collapsed": true,
    "jupyter": {
     "outputs_hidden": true
    }
   },
   "outputs": [],
   "source": [
    "def fund(x,a,b,c):\n",
    "    return a*x*x+b*x+c"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 757,
   "metadata": {
    "collapsed": true,
    "jupyter": {
     "outputs_hidden": true
    }
   },
   "outputs": [],
   "source": [
    "X_2 = [1,2,3,4,5]\n",
    "y_2 = [12.5,9,18,14.9,22]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 758,
   "metadata": {
    "collapsed": true,
    "jupyter": {
     "outputs_hidden": true
    }
   },
   "outputs": [],
   "source": [
    "popt, pcov = curve_fit(fund, X_2, y_2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 759,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([ 0.65, -1.41, 12.36])"
      ]
     },
     "execution_count": 759,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "popt"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 760,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[  1.14114289,  -6.84685746,   7.98800064],\n",
       "       [ -6.84685746,  42.6787457 , -52.72080508],\n",
       "       [  7.98800064, -52.72080508,  73.48960823]])"
      ]
     },
     "execution_count": 760,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pcov"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 梯度下降法"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Batch Gradient Decent（批量梯度下降）"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 713,
   "metadata": {
    "collapsed": true,
    "jupyter": {
     "outputs_hidden": true
    }
   },
   "outputs": [],
   "source": [
    "def batch_gradient_Descent(X, y, w, alpha, iters):\n",
    "    temp = np.matrix(np.zeros(w.shape))\n",
    "    parameters = int(w.ravel().shape[1])\n",
    "    cost = np.zeros(iters)\n",
    "    w_list = []\n",
    "\n",
    "    for i in range(iters):\n",
    "        error = (X * w) - y\n",
    "\n",
    "        for j in range(parameters):\n",
    "            term = np.multiply(error, X[:, j])\n",
    "            temp[j, 0] = w[j, 0] - ((alpha / len(X)) * np.sum(term))\n",
    "\n",
    "        w = temp\n",
    "#         print(temp)\n",
    "        w_list.append([temp[0,0],temp[1,0]])\n",
    "#         print(w_list)\n",
    "        cost[i]=computeCost(X, y, w)\n",
    "\n",
    "    return w,w_list,cost"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 714,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(matrix([[1, 1],\n",
       "         [1, 2],\n",
       "         [1, 3],\n",
       "         [1, 4],\n",
       "         [1, 5]]), matrix([[12.5],\n",
       "         [ 9. ],\n",
       "         [18. ],\n",
       "         [14.9],\n",
       "         [22. ]]), matrix([[0.1 ],\n",
       "         [0.22]]))"
      ]
     },
     "execution_count": 714,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "X, y, w"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 715,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "5"
      ]
     },
     "execution_count": 715,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "len(X)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 716,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "matrix([[ -72.6],\n",
       "        [-240.5]])"
      ]
     },
     "execution_count": 716,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "X.T.dot(X.dot(w)-y)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Batch Gradient Decent（批量梯度下降）"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 717,
   "metadata": {
    "collapsed": true,
    "jupyter": {
     "outputs_hidden": true
    }
   },
   "outputs": [],
   "source": [
    "def batch_gradient_Descent1(X, y, w, alpha, iters):\n",
    "    cost = np.zeros(iters)\n",
    "    w_list = []\n",
    "\n",
    "    for i in range(iters):        \n",
    "        gradients = X.T.dot(X.dot(w)-y)\n",
    "        w = w - alpha/len(X) * gradients\n",
    "        w_list.append([w[0,0],w[1,0]])\n",
    "#         print(w_list)\n",
    "        cost[i]=computeCost(X, y, w)\n",
    "\n",
    "    return w,w_list,cost"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 718,
   "metadata": {
    "collapsed": true,
    "jupyter": {
     "outputs_hidden": true
    }
   },
   "outputs": [],
   "source": [
    "alpha = 0.01\n",
    "iters = 100"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 719,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "matrix([[2.25699075],\n",
       "        [4.02807953]])"
      ]
     },
     "execution_count": 719,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "g, g_list,cost = batch_gradient_Descent(X, y, w, alpha, iters)\n",
    "g"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 720,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "matrix([[2.25699075],\n",
       "        [4.02807953]])"
      ]
     },
     "execution_count": 720,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "g, g_list,cost = batch_gradient_Descent1(X, y, w, alpha, iters)\n",
    "g"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 721,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "6.59303381421379"
      ]
     },
     "execution_count": 721,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "computeCost(X, y, g)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 722,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[[0.2452, 0.701],\n",
       " [0.374518, 1.124734],\n",
       " [0.4898308, 1.49797772],\n",
       " [0.5927931604000001, 1.8267052468],\n",
       " [0.6848640713920001, 2.11618387484],\n",
       " [0.7673299144328801, 2.37105772646584],\n",
       " [0.8413248834945761, 2.5954214791216113],\n",
       " [0.9078489902859821, 2.792885369913397],\n",
       " [0.9677839392857204, 2.9666325095143438],\n",
       " [1.021907124607433, 3.119469415289194]]"
      ]
     },
     "execution_count": 722,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "g_list[:10]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 723,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([90.60294662, 72.13586047, 57.7770465 , 46.61192318, 37.92951484,\n",
       "       31.1771245 , 25.92509761, 21.83943011, 18.6604745 , 16.18638648])"
      ]
     },
     "execution_count": 723,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "cost[:10]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 724,
   "metadata": {
    "collapsed": true,
    "jupyter": {
     "outputs_hidden": true
    }
   },
   "outputs": [],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签\n",
    "plt.rcParams['axes.unicode_minus']=False #用来正常显示负号"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 725,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAtYAAAH6CAYAAAAjlgsWAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3Xm4XGWV7/HvykgCAZIQEgZDiJKggBgIAo1KRKFxQAXH\nRhyhuaC22q1ytcWrtjih3TYOqLSgqNxuoa+oOOKEiKISoEVlEIEgBgOBEEKYMq37x7uLFIdzknNO\n6pxdw/fzPPXsql27dq2iIPzqzdrvG5mJJEmSpC0zpu4CJEmSpG5gsJYkSZJawGAtSZIktYDBWpIk\nSWoBg7UkSZLUAgZrSZIkqQUM1pK6QkS8KiJ2buH59oiIv+tn/wsi4uURMXaI54uI2GmIr9krIrYb\nyms2ca6tNvHc9hHxDxGxdSveq51ExIxqOzkiPh0RT64ez2k65sSI2KOeCiV1E4O1pI4XEeOBdwGX\nRsSu1b5ZEZGbuR2widO+Gjg3Ihb02f9PwIeBKQPUMi4iZkfEARHxkoh4V0R8DbgduHiIH+1M4Od9\nfzBExPSBXhART4qI3fp56l0RcekA4XkR8ElgryHW19YiYkfghog4BhgPvBHYJSKeBPwpIuZGxETK\nP+fH/IiSpKEyWEvqeJm5FjgcGAf8pBqlfLB6+tnA7n1ue1bPPdA4R0SMrUY1GyPRHwCuBnZuOuYA\n4FDghMxcWY1CT4yIcU3lTAH+BPwG+AJwGjCNElw/HBGTh/DRXgysp4TrXZr2fy8iPl3VtGNE/E3T\nc/8KnNR8kogI4JXALZl5f/VZJ0VE4/8BRwM/yczfVMePiYitmke5N/Hj5JIhfJ6Wqd77tZs6JjPv\npPwQ+iwwsdr9MPBO4OuZeTPlx8RY4IKRq1ZSrxi3+UMkqf1l5tJqZPLfgHuBCdVTSzNzSfOxTYFx\nfdPuA4DLq+ebD/92n8cAP+6z7++A/6rquCcingjclZn3RsRdwNmZ+V9N738G8OZ+PsYHM/PUps90\nV0QcDlwGfJyNo6oPAvdX9w8FvgI0PtOa6tbsSGBH4H9XYfrpwE/7ftaI6LsU7+d5dEj/LvCffY65\no5/P0RYi4unV3Y9RfnhBGZ3/M7AuIhYB+wFLMvO6pteNAcZn5sOjV62kbmCwltQ1MvOqiHhWZq5v\nCs+TI2KbPoc2Ri+b+6T/B3g88BCPDqaHAV+jBLDb+pxnLCXAr+xTx02bKXUNcAWl3aThxzw2EDfC\n9RGUHwsND7PxR8FDfV9S3Zr9I3B6Zi6r+sbfDCwA/go8F/g08CQ2hvWgtE6s7XOe6zLzq5v5bO3k\nUOAYyudotP0cDdxH+XzjgKcAc/r5UfE14BWjVKekLmGwltTRqjaHCY3RxcxsBM5GeL5yEy+f1LiT\nmQ9FxB3AHpTg2ghaBwCrKaPEOzS/NSWcrcjM+5rqmQysycx1/dS5VfW6NcADmXl90/Nrq/1UPwSe\nQ2lVWQ/cnpl/bjrduuo88NgQ/SjVqOx84EXVrrdUn+Wm6vzPB/4zM2/d1Hk6UWaeBpwWEacCcynf\n34eAMZl5XnVh6B3A66lG8IEfAedT2kckaUjssZbU6WZRWjN+VvXdPq/a/yCwNTA2M6P5Rvmzbzxw\nfXXhY8PewK+BX1LaLy6jjPaOa3rcuP2S0jryhj71fB1Y2+hBBqZT2ic2UILsWWwmDFPaNs4Bvgh8\nC3hHn+fHM4g/v6uL974I/AI4NiJOBxZSLr5cRQnoxwDHN/VM93fh42ZFxJzq9SdFxK8i4uGIuD4i\nju7n2NdVzz0UEVdHxHP7OebEiPhjRDwQEb+NiJcN8L6vioibImJ1RHyn6q9vPBcR8T7gVOBV1e69\ngHOqf0+OpvwAW5qZS6qWoWnAjZnZ928nJGmzDNaSOlpm/jUzn0a50A82XrT4DUprw/q+F9xRQu5a\nSkvAs5rO9evMnJiZUzNzB2BOddzbM3OHPrepmbl1Zv5zn5JeB+wK7MTG0H0S5SLI3YG3D+Iz3ZyZ\nUzJzR0qA79uSsRWP7g8fyEPADOAQ4Njqvc+itJ3sRGkJuRXYFmhcAPngY0/ziEkRsUOf24Q+x/w7\nsAR4G3AP8N8RcVjjyYh4C+VHw/XVMfcBF0XEC5qOOYXS330N5YfNLcDXmo+pvJhysebngM9QeslP\nq86xFfB9yo+Soyk/hgB+BXwQeCtwcrVvr+o1E4GpPLblR5IGxVYQSd1mQ7V9BWVkeB0lhP4UuBE4\nkTKoMIbSCnIPlDmjKUG0ObAeQQmxf4imeY/7GAdMzMw/QAn6jSciotFDPQF4D/DOzFzVz8WQm9M3\nWG/NpgMwVS2rIuJx1QWVx1H6id9btcssi4jXAOdk5n0R0TjfhgFPWH4o9B2hfynw302Pf5KZrwCI\niLMpFwqeQpmtZQol+H4jM4+ujvkcsBj494i4CNgOeC9wQWa+rDrmP4CbgRMoI/gNzwH2z8zfVsc9\nnvIjotHa81HgHZl5TUS8hzIzy68pF2EeRfnx9XPgwOp8jRlgNtcjL0n9MlhL6jrVKOrDwEPVVHxE\nxPbAHZm5uno8hhKkJ0bEGuD3mzjlTzfxHMBSyih1cw3HUfqz11LC+YuBuf21PQxC39aRJwB3DuqF\nJVRvC3wEOCUzl1f1nUy5IPMdEbEnZXQe4AkRMZPyY2BJZt7TdLoLKCPeza7p8/iRWUMy88GIuJgy\nkgxlVHwbyoh145j1EfFF4Izqcz0emAyc23TMhqb6ml3QCNWVaymtLg13AOMjYm9KuD+X0pozndKj\n/mHgD8DHqh74fSk/tJb0816StFkGa0nd6AVU8xL3GR1+a0S8tZ/jd6eMlD4ArM/MrI77GPCUxmh0\nf6LMYb1Vn327UoLipyi9vbdRRtB/TGltGLaIeBxlruxrh/CyM4AbgLOrc4ylzAKyAfh/1bYxQ8p3\nqvuTgJcB32w6z58z80ebea++gf9uSqsJbLz48699jrm92u5ICb0AyzbzPlBmVmnWd7T9XGAe5f91\nEyjfwSsoI/73Ukaop1XHHUQZ7f5VZm6uB16S+mWPtaRuM4YS7uYAu1B6id9DaQlJSgvATtVzu1OC\n19LMXJWZ66pQvS9l9ohvAOMi4okRsWef294RsT+woTEKDo/06f5fSqB8d2N/Zv4U+ATDbDOIiIOr\nGUeeShmN39RsJ82vex/wWkpQ/VZE/Iky68WplB8T06t+8mdWL5kPTK16zb/52DNuVt9l23dk43SE\ndw1wTKMFYzmworo/q8/neF01st1sBZuQmQszc1vKQj+faPTHU0apv5aZGzLzLuB7lH7zlzL01TEl\n6RGOWEvqNh+kjMbunpkrqtHjt1JGbR9P6fE9ODP77VGOiD2AH1AudnsqZeaPhygzcWxDCcxQRkAn\nUS52a7SXjKMsFPPU6j0eaB4xz8y3VcctBA7tZ+7kgexAmW3kNMrczD/JzMaqkWMHfFWxhjIiPLH6\nTJ8FflctXvN44Lwoc1s3TAG+HxGnZub3B1lfs+OALwFEWT79cMqsJFAuxFxNmd7uouqYsZQLPm+h\n9MDfSekffxVl9LzhJMpI85BExFGUFpQrIuJQSqjfi43TD0L5d+OH1ft+eajvIUkNBmtJ3aIxCrov\ncGwVqmdQwtkqyhLlkykjvRdHxNHVaOUjIuIQ4EJKyHtJZq5qeu44ygqHc5pHqPsYW73X32fm1Zuo\ndQzlIrrmBUguo/+/RZxM6c++DPgZJQS+uOn5vrNyBBvnuAb4cGZ+qPoMAewPHBERX6W0y2xNCbvb\nVcffRwm4X4mIJzdfjAk8sfrn0NfXm+4fGBEXVLW+qjrv6QDVRZKnUi5U/AYlzL4ceDJwdNWCsTIi\nPgB8qOqD/wklnD+VjVPmDcVllJaWwyiheTalJ/6QiPjv6kLOOygXrd7F5n+oSNKADNaSusVhlFaP\n44DvRcQrKRenASzKzHuBeyPiSMqsEDdHxGco7R5XUKZ+O40yHdsLm0P1YFWL1LxmEIdOolxYuaSx\no2rRuL/5oCgLmDyRMop7LPBV4Dqq0d7KDVXdDVuxcXEcgN2jLO29CPhbSk/x16r7OwKHZObyiJjd\n9JqTKRdznk1ZmbHhuX0eN1zSdP/NlBHpj1N+oBydmY2p7sjMMyJiFfBOyqwe1wFHZeZ3m475cETc\nQ5ke8PnVMUdn5jf6ee9Nqi6+vKA63wspf6OwhNL/fm01an8OcB6lHeZnEXF4Zi4d6ntJUniNhqRu\nERFPA35DCcp7U0aY35qZK/scN5Uygv33lFaPN1NGNr8LHA/syWOn3juKMvK6P+UiRygjwxMoqy/2\nO/dxRKwGTs7Mrwzj8+wIXFrVd3P1eU7JzJ9v4jWXAFdn5j9WPdnLKUH725SL9H4AnEkJrM+g9F7/\nLSVUHg9slZlrqx8mXwEOyszfDKLWOZQg/czMvGSon3UkRMQulPD+Gsq/D+8BPlP10S+oHr8AeF9m\nnlZNufgTyqDTKZl5dk2lS+pQBmtJXafqYb43M2/czHEzgfGZ+ZeImEsJhtMorQLNy5oPeApKsP5U\nZp4ywHusA07KzC8M8WM0Xj9poH7wAY6fRVlSfUX1+KXAL5tHYKuWlzWZeUXV43xr9Tk+WS0D3mgb\n2Tcz/2eQ7zuH9gvWxwHvo4y8n1n9rUXjuXcBzwPekplXNu3fpTr+/Zl5+ehWLKnTGawlqcdFxLbD\naX2RJD2awVqSJElqAeexliRJklrAYC1JkiS1QMdOt7fDDjvknDlz6i5DkiRJXe7KK6+8KzNnbO64\njg3Wc+bMYfHixXWXIUmSpC4XEbcO5jhbQSRJkqQWMFhLkiRJLWCwliRJklrAYC1JkiS1gMFakiRJ\nagGDtSRJktQCBmtJkiSpBQzWkiRJUgsYrCVJkqQWMFhLkiRJLWCwliRJklrAYC1JkiS1gMFakiRJ\nagGDtSRJktQCBmtJkiSpBQzWkiRJUgsYrIfi4Yfh17+GO+6ouxJJkiS1GYP1UCxbBgcdBN/5Tt2V\nSJIkqc0YrIdi+vSyvfvueuuQJElS2zFYD8XWW8P48bBiRd2VSJIkqc0YrIciAqZNM1hLkiTpMQzW\nQ2WwliRJUj8M1kNlsJYkSVI/DNZDZbCWJElSPwzWQ2WwliRJUj8M1kNlsJYkSVI/DNZDNX06rF4N\na9bUXYkkSZLaiMF6qKZNK1tHrSVJktTEYD1UBmtJkiT1w2A9VAZrSZIk9cNgPVQGa0mSJPXDYD1U\nBmtJkiT1w2A9VAZrSZIk9cNgPVTbbgtjxxqsJUmS9CgG66GKgKlTDdaSJEl6FIP1cEyfbrCWJEnS\noxish2PaNLj77rqrkCRJUhsxWA/HtGmOWEuSJOlRDNbDYbCWJElSHwbr4TBYS5IkqQ+D9XBMmwar\nVsHatXVXIkmSpDZhsB6OxiIxK1fWW4ckSZLahsF6OFx9UZIkSX0YrIfDYC1JkqQ+DNbDMX162Rqs\nJUmSVDFYD4cj1pIkSerDYD0cjWDt6ouSJEmqGKyHY7vtIMIRa0mSJD3CYD0cY8bA1KkGa0mSJD3C\nYD1crr4oSZKkJgbr4TJYS5IkqYnBergM1pIkSWpisB6u6dMN1pIkSXqEwXq4HLGWJElSE4P1cE2b\nBitXwvr1dVciSZKkNmCwHq5p0yCzhGtJkiT1PIP1cLmsuSRJkpoYrIfLYC1JkqQmBuvhMlhLkiSp\nicF6uAzWkiRJamKwHi6DtSRJkpoYrIdr6tSyNVhLkiQJg/XwjR0L229vsJYkSRJgsN4yrr4oSZKk\nisF6S0ybBnffXXcVkiRJagO1BOuImBoR342IxRHx+Wrf2RFxeUScWkdNw+KItSRJkip1jVi/Cjgv\nMxcCUyLiFGBsZh4MzI2IPWqqa2gM1pIkSarUFazvBvaOiO2BxwG7A+dXz10MPK2/F0XEidUo9+Ll\ny5ePTqWbYrCWJElSpa5gfRmwG/Bm4DpgArC0em4FMLO/F2XmWZm5MDMXzpgxY1QK3aRp0+Cee2DD\nhrorkSRJUs3qCtbvBU7KzH8BrgeOBSZVz21TY11DM21aCdWrVtVdiSRJkmpWV4CdCuwTEWOBA4GP\nsLH9Y19gSU11Dc306WVrO4gkSVLPG1fT+34Y+CKlHeRy4BPAzyNiZ+A5wEE11TU0zcuaz51bby2S\nJEmqVS3BOjN/A+zVvC8iFgGHA6dn5r111DVkzcFakiRJPa2uEevHyMx72DgzSGcwWEuSJKnSGRcJ\ntqtGsHb1RUmSpJ5nsN4SU6eWrSPWkiRJPc9gvSXGj4cpUwzWkiRJMlhvMVdflCRJEgbrLTd9usFa\nkiRJBust5oi1JEmSMFhvOYO1JEmSMFhvOYO1JEmSMFhvuUawzqy7EkmSJNXIYL2lpk2Ddevgvvvq\nrkSSJEk1MlhvKZc1lyRJEgbrLWewliRJEgbrLWewliRJEgbrLTd9etkarCVJknqawXpLOWItSZIk\nDNZbburUsjVYS5Ik9TSD9ZaaOBG23tpgLUmS1OMM1q3g6ouSJEk9z2DdCtOmwd13112FJEmSamSw\nbgVHrCVJknqewboVDNaSJEk9z2DdCgZrSZKknmewboXp00uwzqy7EkmSJNXEYN0K06bBmjXwwAN1\nVyJJkqSaGKxbwdUXJUmSep7BuhUM1pIkST3PYN0KBmtJkqSeZ7BuBYO1JElSzzNYt0IjWLv6oiRJ\nUs8yWLeCI9aSJEk9z2DdCpMmldtdd9VdiSRJkmpisG6VmTPhzjvrrkKSJEk1MVi3ysyZcMcddVch\nSZKkmhisW2XmTFi2rO4qJEmSVBODdas4Yi1JktTTDNatMmsWLF8O69fXXYkkSZJqYLBulZkzYcMG\nZwaRJEnqUQbrVpk5s2xtB5EkSepJButWmTWrbA3WkiRJPclg3SqOWEuSJPU0g3WrNIK1U+5JkiT1\nJIN1q0yZAltt5Yi1JElSjzJYt0pE6bM2WEuSJPUkg3UrufqiJElSzzJYt5KrL0qSJPUsg3Ur2Qoi\nSZLUswzWrTRzpsuaS5Ik9SiDdSu5rLkkSVLPMli3kovESJIk9SyDdSu5rLkkSVLPMli3kqsvSpIk\n9SyDdSvZCiJJktSzDNatNGUKTJpksJYkSepBButWinD1RUmSpB5lsG41V1+UJEnqSQbrVjNYS5Ik\n9SSDdavNmmUriCRJUg8yWLfazJll5UWXNZckSeopButWc1lzSZKknmSwbjVXX5QkSepJButWc/VF\nSZKknmSwbjVXX5QkSepJButWM1hLkiT1JIN1qzWWNbcVRJIkqacYrFutsay5I9aSJEk9xWA9EgzW\nkiRJPcdgPRJcfVGSJKnnGKxHgiPWkiRJPcdgPRJc1lySJKnnGKxHgsuaS5Ik9RyD9UhoLGtun7Uk\nSVLPMFiPBBeJkSRJ6jkG65FgsJYkSeo5BuuRYCuIJElSzzFYj4RttinLmjtiLUmS1DMM1iPBZc0l\nSZJ6jsF6pMycaSuIJElSDzFYj5RZsxyxliRJ6iEG65FiK4gkSVJPMViPFJc1lyRJ6ikG65Eya1ZZ\n1nz58rorkSRJ0igwWI8UF4mRJEnqKQbrkWKwliRJ6ikG65HSCNZOuSdJktQTDNYjpbGsuSPWkiRJ\nPaH2YB0RZ0bEUdX9syPi8og4te66tpjLmkuSJPWUWoN1RDwdmJWZF0XEMcDYzDwYmBsRe9RZ2xZr\nLGtuK4gkSVJPqC1YR8R44D+AJRHxQmARcH719MXA02oqrXVcfVGSJKln1Dli/WrgWuB04KnAG4Gl\n1XMrgJl9XxARJ0bE4ohYvLwT5od29UVJkqSeUWewXgCclZnLgK8ClwKTque2oZ/aMvOszFyYmQtn\nzJgxepUOl8FakiSpZ9QZrP8EzK3uLwTmsLH9Y19gyeiX1GIzZ5aVF9etq7sSSZIkjbBxNb732cA5\nEfEKYDylx/pbEbEz8BzgoBpra41ZsyAT7rpr4/R7kiRJ6kq1BevMvA94afO+iFgEHA6cnpn31lFX\nSzWvvmiwliRJ6mq1z2PdLDPvyczzq77rzufqi5IkST2jrYJ113H1RUmSpJ5hsB5Jza0gkiRJ6moG\n65HUWNbcVhBJkqSuZ7AeSY1lzR2xliRJ6noG65G2yy6wdOnmj5MkSVJHM1iPtNmz4c9/rrsKSZIk\njTCD9UibPRtuuw02bKi7EkmSJI0gg/VImz0b1q6FO++suxJJkiSNIIP1SJs9u2xtB5EkSepqBuuR\nZrCWJEnqCQbrkWawliRJ6gkG65G23XYwZYrBWpIkqcsZrEdahFPuSZIk9QCD9WgwWEuSJHU9g/Vo\nMFhLkiR1PYP1aHjc42D5cnjwwborkSRJ0ggxWI+Gxswgt91Wbx2SJEkaMQbr0eCUe5IkSV3PYD0a\nDNaSJEldz2A9GnbZpUy7Z7CWJEnqWgbr0TBhAuy0k8FakiSpixmsR4tT7kmSJHU1g/VoMVhLkiR1\nNYP1aGkE68y6K5EkSdIIMFiPltmz4eGHy0IxkiRJ6joG69HilHuSJEldzWA9WgzWkiRJXc1gPVpc\n1lySJKmrGaxHy7RpMHmyI9aSJEldymA9WiKcck+SJKmLDTlYR8SMiJi8JW8aEfMjYko/+3eNiNiS\nc7c1g7UkSVLXGs6I9T8At0fEbvBIGF4VESdUjydFxNzNnONfgT9GxFZ99p8P/DIixg6jrvZnsJYk\nSepawwnWRwLXZuat1eOVwBRg++rxl4AfRsTU/l4cEdsChwFfyMyHmvYfCBwM7AU8bhh1tb/Zs2HZ\nsjKftSRJkrrKkIJ1RMwG9gc+19iXmauBNcCkatd7gZ2ALwxwmtcDY4HP9Nn/YeAK4JvAVyJi4lBq\n6wiNmUH+8pd665AkSVLLDXXE+o3A/cB/99m/AtgGIDOvB94OfL7viyNiPKWV5HuZuaxp//HA04CT\ngDcAOwLnR8SEIdbX3pzLWpIkqWsNOlhHxNbACZQ2kAf6PL0CeKT1IzPPBH4bES/pc9wbgLmU9pHG\neZ9FGb1+e2ZelZn3Ac8BDgQui4g5g/407c5gLUmS1LWGMmL9NmDaAM/dDewZEW+KiC9FxA3AMuC8\nposcZ1HaRNY3XhQRrwS+Q+m3/mRjf2beDBwK7AD8ISI+tKUzkbSFXXctW4O1JElS1xk3mIMiYg/g\nncC91eOZlF7pvYF9gT2BBCZQ+qQ/BCwGbsjMdRExDvga8BBwaXWOVwPnAp8EvhsRB2bmr6vndgYO\nB15ICeP7AZ1/xd/EiTBrlsFakiSpC202WFfzTZ8P/An4KaVF40HgtcDlwKeAhcDLgUMyc30/p9kF\n2Bl4CyUsA5wHrMzMb0XE94G7gF9Xz+1anXf/zHxJRIwf4Lydxyn3JEmSutJgWkEmAuuA44C1AJm5\nKjPnZ+ZrM/PzlOA9BdinvxNUU/Ptn5kXNO1bn5nfqh6OBZY2vaQxDd/D1bFrB/+R2pzBWpIkqStt\nNlhn5l3AgZl5zSYO+wVlFPu5mzjPqk28fhtKT3bDhmrbHaPUzRrBOrPuSiRJktRCg7p4MTM3bOb5\nB4AfAK8YZh1TgeXDfG1nmT0bHngAVqyouxJJkiS10HBWXhzIOcA+EfGcobyoWtb88cCSFtbSvpxy\nT5IkqSu1Mlh/G/gtcEa1bDkR8ZKIODIiNvU+x1J6uH/bwlra1+Oq1doN1pIkSV1lqMF6HOVCw8fI\nzASOBx4HXBQRU4FXAV/p5xwBEBG7Uqbm+2q1MEz3c8RakiSpKw1qHusmE6pbvzLzyog4Fvgv4CbK\nRYlf7tOjPRFYX82NfRHlQsV39jnVxKb36y4zZpT5rA3WkiRJXWWoI9YT2Rh6+5WZFwKHUOa4/iPw\nsT6HjAMmUUatVwNHZubdfY6Z1GfbPSKcck+SJKkLDWnEOjOPH+Rxi4HnDfDcUY37EXFA1ULS95jL\nqNpFutLs2XDbbXVXIUmSpBZq5cWLQ9ZfqO4JjlhLkiR1nVqDdc+aPRtuvx3Wds+CkpIkSb3OYF2H\n2bPLyotLl27+WEmSJHUEg3UdnHJPkiSp6xis62CwliRJ6joG6zq4+qIkSVLXMVjXYdKkslCMwVqS\nJKlrGKzr4pR7kiRJXcVgXZfZs2HJkrqrkCRJUosYrOuyxx5w002wfn3dlUiSJKkFDNZ1mT8f1qyB\nW2+tuxJJkiS1gMG6LvPmle0f/1hvHZIkSWoJg3Vd5s8v2xtuqLcOSZIktYTBui477ADbb++ItSRJ\nUpcwWNclooxaO2ItSZLUFQzWdZo3z2AtSZLUJQzWdZo/H/7yF7j//rorkSRJ0hYyWNepMTPIjTfW\nW4ckSZK2mMG6To2ZQbyAUZIkqeMZrOv0hCeUrX3WkiRJHc9gXafJk2H2bEesJUmSuoDBum7ODCJJ\nktQVDNZ1mz+/jFhn1l2JJEmStoDBum7z5sG998Kdd9ZdiSRJkraAwbpujZlBbAeRJEnqaAbrujXm\nsvYCRkmSpI5msK7b7NkwcaIj1pIkSR3OYF23sWPLfNaOWEuSJHU0g3U7mD/fEWtJkqQOZ7BuB/Pm\nwU03wbp1dVciSZKkYTJYt4P580uovuWWuiuRJEnSMBms20Fjyj37rCVJkjqWwbodNKbcs89akiSp\nYxms28H06eXmiLUkSVLHMli3i3nzHLGWJEnqYAbrduGUe5IkSR3NYN0u5s2Dv/4V7ruv7kokSZI0\nDLUG64iYGRFXV/fPjojLI+LUOmuqjTODSJIkdbS6R6w/DkyKiGOAsZl5MDA3Ivaoua7R15gZxGAt\nSZLUkWoL1hFxGHA/sAxYBJxfPXUx8LSayqrPE54AEfZZS5IkdahagnVETADeA7yz2rU1sLS6vwKY\nOcDrToyIxRGxePny5SNf6GjaaivYbTdHrCVJkjpUXSPW7wTOzMyV1ePVwKTq/jYMUFdmnpWZCzNz\n4YwZM0ahzFHmzCCSJEkdq65g/WzgjRFxCfAU4Cg2tn/sCyypp6yazZtXRqwz665EkiRJQzSujjfN\nzGc07lfh+gXAzyNiZ+A5wEF11FW7+fNh9eoy7d7OO9ddjSRJkoag7llByMxFmbmKcgHjr4BnZua9\n9VZVE2cGkSRJ6li1B+uGzLwnM8/PzGV111KbxlzW9llLkiR1nLYJ1gJ23RUmTTJYS5IkdSCDdTsZ\nMwb22MOw6G5QAAAab0lEQVRWEEmSpA5ksG438+Y5Yi1JktSBDNbtZs894ZZb4MEH665EkiRJQ2Cw\nbjdPeQqsXw+//33dlUiSJGkIDNbtZr/9yvaqq+qtQ5IkSUNisG43c+bA9tvD1VfXXYkkSZKGwGDd\nbiJgwQJHrCVJkjqMwbodLVgA11wDa9fWXYkkSZIGyWDdjvbbDx5+GK6/vu5KJEmSNEgG63a0YEHZ\n2mctSZLUMQzW7Wj+/LK0uX3WkiRJHcNg3Y7GjoV993XEWpIkqYMYrNvVfvuVYL1hQ92VSJIkaRAM\n1u1qwQK47z64+ea6K5EkSdIgGKzblSswSpIkdRSDdbvaay8YP94+a0mSpA5hsG5XEyeWcO2ItSRJ\nUkcwWLezxgWMmXVXIkmSpM0wWLezBQtg+XJYurTuSiRJkrQZBut21riA0T5rSZKktmewbmdPfjJE\n2GctSZLUAQzW7Wybbcry5gZrSZKktmewbncLFtgKIkmS1AEM1u1uv/3gttvgrrvqrkSSJEmbYLBu\ndwsWlK2j1pIkSW3NYN3uGsHaPmtJkqS2ZrBud9OmwW67OWItSZLU5gzWnWC//RyxliRJanMG606w\n335w442walXdlUiSJGkAButO0Oiz/u1v661DkiRJAzJYdwKXNpckSWp7ButOsNNOMHOmfdaSJElt\nzGDdKfbbzxFrSZKkNmaw7hQLFsAf/gAPPVR3JZIkSeqHwbpTHHAArF8PixfXXYkkSZL6YbDuFE9/\netn+7Gf11iFJkqR+Gaw7xfTpsM8+BmtJkqQ2ZbDuJIsWwS9+AWvW1F2JJEmS+jBYd5JFi+CBB+yz\nliRJakMG607yjGeUre0gkiRJbcdg3Ul22AH23hsuuaTuSiRJktSHwbrTNPqs166tuxJJkiQ1MVh3\nmkWL4P774cor665EkiRJTQzWnabRZ207iCRJUlsxWHeaGTNgr70M1pIkSW3GYN2J7LOWJElqOwbr\nTnToobB6NVx1Vd2VSJIkqWKw7kSHHlq2toNIkiS1DYN1J9pxR3jSk1woRpIkqY0YrDvVokXw85/D\nunV1VyJJkiQM1p3LPmtJkqS2YrDuVI0+a9tBJEmS2oLBulPNnAlPfKIXMEqSJLUJg3UnO/RQ+6wl\nSZLahMG6ky1aBPfdB1dfXXclkiRJPc9g3cnss5YkSWobButONmsWzJ9vn7UkSVIbMFh3usZ81uvX\n112JJElSTzNYd7pFi2DVKuezliRJqpnButM961kwZgx8+9t1VyJJktTTDNadbsYMeMYz4Otfr7sS\nSZKknmaw7gZHHw2//z388Y91VyJJktSzDNbd4Oijy/bCC+utQ5IkqYcZrLvB4x4HBxxgO4gkSVKN\nDNbd4phj4De/gdtuq7sSSZKknmSw7hbHHFO23/hGvXVIkiT1KIN1t5g3D/bay3YQSZKkmhisu8nR\nR8Oll8Jdd9VdiSRJUs8xWHeTY46BDRvgW9+quxJJkqSeY7DuJk95CsyZYzuIJElSDQzW3SSijFr/\n8IewalXd1UiSJPUUg3W3OeYYWLMGvvvduiuRJEnqKQbrbnPwwTBrlu0gkiRJo8xg3W3GjIEXvrCM\nWD/4YN3VSJIk9QyDdTc65hi4//7Say1JkqRRYbDuRosWwfbbw4UX1l2JJElSzzBYd6MJE+Coo8p8\n1mvX1l2NJElSTzBYd6tjjoEVK+BnP6u7EkmSpJ5gsO5WRxwB224LX/pS3ZVIkiT1BIN1t5o8GV79\narjgAli+vO5qJEmSup7BupudfHJZLOacc+quRJIkqesZrLvZk54Ehx4Kn/88bNhQdzWSJEldzWDd\n7U4+GW65BX7wg7orkSRJ6moG62539NEwcyZ89rN1VyJJktTVagvWEbFdRHwvIi6OiAsjYkJEnB0R\nl0fEqXXV1XUmTIATToBvfxtuvbXuaiRJkrpWnSPWrwT+LTOPAJYBrwDGZubBwNyI2KPG2rrLiSdC\nBJx1Vt2VSJIkda3agnVmnpmZP6wezgCOA86vHl8MPK2WwrrR7NnwvOfBF75QZgmRJElSy9XeYx0R\nBwNTgduApdXuFcDMfo49MSIWR8Ti5c7NPDQnnwx33gkXXlh3JZIkSV2p1mAdEdOATwGvB1YDk6qn\ntqGf2jLzrMxcmJkLZ8yYMXqFdoO//VvYfXc488y6K5EkSepKdV68OAG4AHhXZt4KXMnG9o99gSU1\nldadxoyBk06CSy+FP/yh7mokSZK6Tp0j1scD+wHvjohLgABeFRH/BrwM+E6NtXWn172uzBLyuc/V\nXYkkSVLXqfPixc9m5tTMXFTdzgUWAb8CnpmZ99ZVW9eaMQNe+lL48pdh9eq6q5EkSeoqtV+82Cwz\n78nM8zNzWd21dK2TT4ZVq+C88+quRJIkqau0VbDWKPibv4H994ePfMSp9yRJklrIYN1rIuCDH4Ql\nS1wwRpIkqYUM1r3oiCPg0EPhtNPg/vvrrkaSJKkrGKx7UQR8+MNwxx1wxhl1VyNJktQVDNa96uCD\n4aij4PTTYcWKuquRJEnqeAbrXvbBD5YZQk4/ve5KJEmSOp7Bupftsw+88pXwyU/C7bfXXY0kSVJH\nM1j3uve/H9auhQ98oO5KJEmSOprButfNnQsnnghf+ALcdFPd1UiSJHUsg7Xg1FNh/Hj4P/+n7kok\nSZI6lsFasNNO8Ja3wH/+J1xzTd3VSJIkdSSDtYpTToHttoO3vQ0y665GkiSp4xisVUydCh/6EPzo\nR/Af/1F3NZIkSR3HYK2NTjoJnv1s+Kd/gptvrrsaSZKkjmKw1kYRcPbZMHYsvO51sGFD3RVJkiR1\nDIO1Hm32bDjjDLj00rJwjCRJkgbFYK3Hes1r4PnPh3e9C264oe5qJEmSOoLBWo8VAWedBZMnl5C9\nbl3dFUmSJLU9g7X6t9NOcOaZ8Otfw8c+Vnc1kiRJbc9grYG9/OXwspfBe98Lv/td3dVIkiS1NYO1\nNu0znylzXB97LKxaVXc1kiRJbctgrU3bYQf46lfhuuvK6PXatXVXJEmS1JYM1tq8ww+Hz30OfvAD\neMMbXPJckiSpH+PqLkAd4oQT4JZbyrLnc+eWqfgkSZL0CIO1Bu+002DJEvjnf4bddit915IkSQIM\n1hqKCDjnHFi6tCx5vuuu8Ixn1F2VJElSW7DHWkMzcSJceGFpB3nRi+D66+uuSJIkqS0YrDV0U6fC\nd78L48fDkUfCjTfWXZEkSVLtDNYant13h+99D1avhkMOgSuuqLsiSZKkWhmsNXz77Qe//CVsvTUs\nWlSCtiRJUo8yWGvLzJsHl18O8+fDUUfBl75Ud0WSJEm1MFhry82aBT/7GRx2WJkt5EMfchEZSZLU\ncwzWao0pU+Db34ZXvhLe/W5405tc/lySJPUUg7VaZ8IE+PKX4R3vgDPPLBc13nBD3VVJkiSNCoO1\nWmvMGDj9dLjgArjpJliwAD77WVtDJElS1zNYa2S85CXwu9+VlRnf8AZ43vPgr3+tuypJkqQRY7DW\nyNl55zIF36c+BT/9KeyzD3z963VXJUmSNCIM1hpZEeVCxquvhjlz4MUvhuc/H37/+7orkyRJaimD\ntUbHnnuWxWQ++lG47DLYd184/nj4y1/qrkySJKklDNYaPRMmwCmnlIsa3/pW+OpXYY894F3vgpUr\n665OkiRpixisNfqmT4d//dcyFd+LXwwf+Qg8/vHw/vfDsmV1VydJkjQsBmvVZ86cMmp91VVw0EHw\nvvfB7NllkZlf/7ru6iRJkobEYK36LVgA3/lOGcE++WS46KIStJ/61LLgzEMP1V2hJEnSZhms1T7m\nzYMzzoClS+HTn4b77oPXvAZ23BGOOw6++U1DtiRJalsGa7WfKVPgjW+Ea6+FH/0IXvayMh/2i15k\nyJYkSW0rskOXml64cGEuXry47jI0WtauhZ/8pCyVfuGFsGIFbLUVHHIIPOtZcNhhsP/+MG5c3ZVK\nkqQuExFXZubCzR5nsFbHWbu2rOT4/e/Dj38M11xT9m+7LSxaBIceCgccAPvtB1tvXWupkiSp8w02\nWDu8p84zfjwccUS5Adx5J1xySQnZP/4xfOtbZf+YMfCkJ8HCheW2//7l8bbb1la6JEnqXo5Yq/ss\nWwaLF5fbFVeU2/LlG5/fZRd44hNLyH7iE8tt7lzYeWcYO7a+uiVJUluyFURqyITbboOrr4brrisX\nRV53Xbndf//G48aPL/No7757mWN7991LCN9554237beHiNo+iiRJGn22gkgNESUwz54NL3zhxv2N\nwH3DDXDLLeW2ZEnZXnQR3HHHY8+11VYlYO+4I8yYATvsULaN27RpMHVqCeDbb1/uT55sGJckqQcY\nrNW7mgN3fx54AP76V7j99sfe7ryzhPKrriptJmvWDPw+48fDdtuVaQS33fbR2ylTygWWzbfJk8t2\n0qSNt8mTN97faiuYOHHjdtw4g7skSW3AYC0NZPJkePzjy21TMstiNsuXwz33bLytXLlxu3JlOea+\n+2DVqjIafuON5fEDD5SWlPXrh1dnxMaQPWHCY7eN2/jxj92OG1e2jVvj8bhxj73ffBs7tv/HzfvH\njt146/t4OLcxYx679QeFJKmNGKylLRVRRqC3ZLaRzDLqff/9G28PPtj/7eGHy+I4fbdr1pT7/W3X\nri23Bx4o2+Z969ZtvN+8b9062LChdf+cRkLEo8N2fwF8oFDedzvcY/reH8pzdZyn722wx/a3f0te\nK0ldyGAttYOIMsI8cWLp024XGzaUkfRG2F6/fmPobjxeu7ZsG881H9N3/3BvjToa283t6+/5wWz7\nO2fjM27u+P4eb+q45vfI3LjtFYMN+sM5phXnGM1jBnOOwdxacZ5W1dK4+bdK6jEGa0kDa/zPcfz4\nuivpDZnltqUBfaCg39/r+nvcONem9m+upsHUOpjjm58b6PNtrtbmW+NH0kDnH+x5Nve5m2vtpR9M\n/dlciI9o7Q+BLTnfpn4gtPs5h3K+wR47mOMGe0zj1uUM1pLULhr/4xkzpvSlqzs0fjD1F9I390Nj\nsPs3dZ7Bnqvvj6UtrWkotfb9UTOYcw3mx8+GDRvb2rb0Mwz3NdqoOYQP9YdF4/hf/rLMztWm/JNb\nkqSR1PyDSb2lbyAf6AdFq37I9PdDZUvfu78fRn33DfTDcXM/TAZba/OxW21V97e6SQZrSZKkkeCP\nqp7jNy1JkiS1gMFakiRJagGDtSRJktQCBmtJkiSpBQzWkiRJUgsYrCVJkqQWMFhLkiRJLWCwliRJ\nklrAYC1JkiS1gMFakiRJagGDtSRJktQCBmtJkiSpBQzWkiRJUgsYrCVJkqQWMFhLkiRJLWCwliRJ\nklrAYC1JkiS1gMFakiRJaoHIzLprGJaIWA7cWtPb7wDcVdN7a3T5XfcOv+ve4XfdO/yue8dIf9e7\nZeaMzR3UscG6ThGxODMX1l2HRp7fde/wu+4dfte9w++6d7TLd20riCRJktQCBmtJkiSpBQzWw3NW\n3QVo1Phd9w6/697hd907/K57R1t81/ZYS5IkSS3giLUkSZLUAgbrIYqIsyPi8og4te5a1FoRsV1E\nfC8iLo6ICyNigt93d4uImRFxdXXf77qLRcSZEXFUdd/vugtFxNSI+G5ELI6Iz1f7/K67TPXn9s+r\n++Mj4qKI+EVEvH6gfaPJYD0EEXEMMDYzDwbmRsQeddeklnol8G+ZeQSwDHgFft/d7uPAJP/b7m4R\n8XRgVmZe5Hfd1V4FnFdNuTYlIk7B77qrRMRU4Fxg62rXPwBXZuYhwEsiYsoA+0aNwXpoFgHnV/cv\nBp5WXylqtcw8MzN/WD2cARyH33fXiojDgPspP6IW4XfdlSJiPPAfwJKIeCF+193sbmDviNgeeByw\nO37X3WY98HJgVfV4ERu/40uBhQPsGzUG66HZGlha3V8BzKyxFo2QiDgYmArcht93V4qICcB7gHdW\nu/xvu3u9GrgWOB14KvBG/K671WXAbsCbgeuACfhdd5XMXJWZ9zbt6u/P7lr/PDdYD81qYFJ1fxv8\n59d1ImIa8Cng9fh9d7N3Amdm5srqsd9191oAnJWZy4CvUkaw/K6703uBkzLzX4DrgWPxu+52/f3Z\nXeuf5/5LNjRXsvGvkvYFltRXilqtGsW8AHhXZt6K33c3ezbwxoi4BHgKcBR+193qT8Dc6v5CYA5+\n191qKrBPRIwFDgQ+gt91t+vv/9O1/r/beayHICK2BX4O/Bh4DnBQn7+SUAeLiJOBDwG/rXZ9Efgn\n/L67WhWuX4D/bXel6sKlcyh/HTyeclHyt/C77joR8VTKn9u7AZcDL8b/rrtSRFySmYsiYjfgu8CP\ngL8BDgJ27bsvM9ePWm0G66Gprkg9HLi0+qtFdTG/797hd907/K57h99194uInSkj1D9o/HDqb9+o\n1WOwliRJkracPdaSJElSCxisJUmSpBYwWEvSKImIyRGxQ599B0TEflH8S0T8JSI2+2dzRMyIiMkj\nUOPUiNhmCMfPqLaTI+LTEfHk6vGcpmNOdNU7Sb3AYC1JoyAiJgK/pyxU0uwtlFkrAB6kLMG8YRCn\n/Afg9uqqeCJi14hYFREnVI8nRcTcTZ6hf68HlkbEnps7MCJ2BG6olgkfT1l8ZZeIeBLwp4iYW33u\nM4G/G0YtktRRDNaSNAoy82HKFFCvjognAEREUObU/r9ZriRfw8aleomIsZsYlT4SuLaacx1gJTAF\n2L56/CXgh9WsCI8SEQdGxBVVMO7rBcA1mXn9ID7TnZQpKT8LTKx2P0xZgOfrmXkzsBcwljJHvCR1\nNYO1JI2ejwEBnFA9fhplfuWPRkQCHwfmRURWj9cB5/c9SUTMBvYHPtfYl5mrKcG8seLYe4GdgC/0\nU8fdwOOBCyJiXNN5nwA8Hfh/EbHnALetmo5/etPnOry6vwj4M3BtRCyqHi/JzOuaXjemGsmWpK4y\nbvOHSJJaITNvjYgjKQsXAJwE/BI4vnp8PPBcysIWsDEk9/VG4H7gv/vsX0FZwpfMvD4i3k5ZebBv\nHX+KiGOB71BC8T821RPAJ6pbX2uAHYGHqseHAscAa4EDqn1HA/dRWkPGUVa2nFP9UGj2NcpiLZLU\nNZzHWpJqEBHjge8B52XmF6t9HwCenpmLNvG6rSkjwjdm5kF9nvsD8IvMPLFp38zqnH1DOBHxUeAU\nSkC+HrgZeF9mfryfY68Almfmc/t57lRKr/gOwLHAmMw8LyK2A+4ATgZ+Wh3+I8oo/Gcz87aBPqck\ndSJHrCVpFETE0ZRR5g3AH4B7KSPT6yJiEpDALGBFc7sF5c/pMZnZ6L1+GzBtgLe5G9gzIt4ELAQO\nBuYBayLiiqZ+7Ib3An8BLqP0Sd8DfKaq50Tg55l5VUTsRGk9eUOfzxTVOd4JvIjyQ2Ev4B0RsRKY\nQem9XpqZS6rXTKP8KDBUS+o6BmtJGh1nUWb92JUy88YcSijtz4N9Hn8TeFE1Zd07KaG8MRr9emBv\nYF9gT0pAnwBcAXwIWAzckJnr+r5JZj4EfCoi9gJeC7w6Mx+sptv7d+D9wFXAC6vzfrPx2ir8f5PS\nJ340JZwD/Ar4IPBWYNtq317AxVVf9VTAUC2pK9kKIkmjKCJWA28CLqT0UK+ljGJvT2nH+ALw7sbh\nlBHfdZTZNi6lzLDxU+BA4AhKgL68ui0EXg5Mzcz1g6xnWmauiIi51SweVC0cK4G/z8wvVPNqz2k8\n3/Taw4C7MvOaiHgPpRXkNMrI+VHAN4CfA7dn5isiYndKu8nczLxlCP/YJKkjOCuIJNUgM+/NzGWZ\neXdm3kO5aHE88L+AF2bmysy8pzrmLjYG7OMoYZzMXJWZ8zPztZn5eUrv8hRgn8HUUPVr/y4iXtcn\nNM+utjtW77Ohb6iu3AGMiYi9Kb3aY4HplPaTAD4MfB54RtU2si+l3WTJYOqTpE5jK4gk1axavfB9\nwLnAH4GzI+KBzHxk7ufMvCsiDszMDSWj9usXlDaS5wL/M4i3fhNlur+r++x/WrX9W0o7yUDOpYTo\ncZT2k1dUt60p7So7U/rBzwUOAg4BfpX+VamkLuWItSTVKCImAF+hjPa+OzM/DJwHfDUijmg+dnMr\nMmbmA8APGMQ0dhExBXg7ZXaOviH8NcBPgIMj4qmbeL+FmbktJZh/IjN3yMwdKBdnfq0a6b6LclHj\nm4GXAhdvrjZJ6lQGa0mqSbUq4jcovdInZObt1VP/C/gd8PWIOGCg1w/gHGCfiHjOZo77GOWCxPf0\nqemVlF7tkyiB/9z+Vm9sOv4o4G+A8RFxaES8gnKx4seaDjuDEvZ3BL48tI8jSZ3DYC1Jo29CRGxP\nadc4EnhTZn698WQ1W8dLKT3VX4mIsUM497eB3wJnRMS2ABHxkog4sroIkYh4HmU6vX/OzJWNF0bE\nMyirOX4sM28E/jdlZo8fVVPu9ecy4GWUHvAvA/9JuXjxkKa67wDWA3dRRuYlqSs5K4gkjZJqIZUP\nUGbceB0ltEZmnjvA8S8F/pSZV/fZ/+/AIZnZ72h2ROxPCby/ocwv/SXKqPJMytzSNwA3AQc02ksi\n4iTKaovfBP6u0QcdEftRFnV5CHh9Zn5/gPd8NiVY/4xyceLxwLMoS6efA1wEPBNYDRyemUsH/icl\nSZ3JYC1JoyAi3k9pu/gEZeaO11N6kS8CrqSM5q6mjOhOACZTliefSmmh+FxmNuavPpMSrPfdxPsd\nDfwXZVGabYAvZ+YJ1XMnAtdm5mURcShl3ulDqtpO6TvndTXrx4XAE4AfAy/JzJURsQvwHEpP9t7V\n5/tMZmZELKgev4CymuNp1XzZP6Fc7HhKZp49rH+YktSmnBVEkkZY1aN8FPD2zPy3at8nKL3Uz6Es\n+b0tA/+ZfHlmfrTp8cTqNqDMvDAiDqEs8rIbTT3PmXlW06EzgJ2AozLz2wOc6/fVKPjHgLub2kee\nSVmw5mzg+Y3gXzmS8oPgwMy8sjrPH6oR8LOBazdVvyR1IkesJWkURMSkzOy7omJbiIgxm5txRJK0\neQZrSZIkqQWcFUSSJElqAYO1JEmS1AIGa0mSJKkFDNaSJElSCxisJUmSpBYwWEuSJEkt8P8BNorf\nsoQqXPQAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1674d3719b0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "fig, ax = plt.subplots(figsize=(12, 8))\n",
    "ax.plot(np.arange(iters), cost, 'r')\n",
    "ax.set_xlabel('迭代次数', fontsize=18)\n",
    "ax.set_ylabel('代价', rotation=0, fontsize=18)\n",
    "ax.set_title('误差和训练Epoch数', fontsize=18)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 726,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\npCVJkqQB/AdDcc7qlsajwgAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1674d4cb860>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "fig, ax = plt.subplots(figsize=(12, 8))\n",
    "plt.plot(np.matrix(g_list)[:,0], np.matrix(g_list)[:,1], 'r',marker='o',markersize=10,markerfacecolor='blue',markeredgecolor='blue')\n",
    "ax.set_xlabel('w0', fontsize=18)\n",
    "ax.set_ylabel('w1', rotation=0, fontsize=18)\n",
    "ax.set_title('参数变化', fontsize=18)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 727,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "matrix([[0.2452    ],\n",
       "        [0.374518  ],\n",
       "        [0.4898308 ],\n",
       "        [0.59279316],\n",
       "        [0.68486407]])"
      ]
     },
     "execution_count": 727,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "np.matrix(g_list)[:5,0]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 728,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "matrix([[0.701     ],\n",
       "        [1.124734  ],\n",
       "        [1.49797772],\n",
       "        [1.82670525],\n",
       "        [2.11618387]])"
      ]
     },
     "execution_count": 728,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "np.matrix(g_list)[:5,1]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": true,
    "jupyter": {
     "outputs_hidden": true
    }
   },
   "source": [
    "### Stochastic Gradient Descent（随机梯度下降）"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 729,
   "metadata": {
    "collapsed": true,
    "jupyter": {
     "outputs_hidden": true
    }
   },
   "outputs": [],
   "source": [
    "def stochastic_gradient_Descent(X, y, w, alpha, iters):\n",
    "    cost = []\n",
    "    w_list = []  \n",
    "       \n",
    "\n",
    "    for j in range(iters):\n",
    "         # 在双层for循环之间，每个轮次开始分批次迭代之前打乱数据索引顺序\n",
    "        arr = np.arange(len(X))\n",
    "        np.random.shuffle(arr)\n",
    "        X = X[arr]\n",
    "        y = y[arr]\n",
    "        for i in range(len(X)):\n",
    "            xi = X[i:i+1]\n",
    "            yi = y[i:i+1]\n",
    "            gradients = xi.T.dot(xi.dot(w)-yi)\n",
    "            w = w - alpha * gradients\n",
    "            w_list.append([w[0,0],w[1,0]])\n",
    "            cost.append(computeCost(X, y, w))\n",
    "\n",
    "    return w,w_list,cost"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 730,
   "metadata": {
    "collapsed": true,
    "jupyter": {
     "outputs_hidden": true
    }
   },
   "outputs": [],
   "source": [
    "iters = 20"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 731,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "matrix([[2.21505713],\n",
       "        [3.94405048]])"
      ]
     },
     "execution_count": 731,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "g, g_list,cost = stochastic_gradient_Descent(X, y, w, alpha, iters)\n",
    "g"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 732,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[[0.30800000000000005, 1.26],\n",
       " [0.36972000000000005, 1.38344],\n",
       " [0.47718840000000007, 1.4909084],\n",
       " [0.5617801800000001, 1.82927552],\n",
       " [0.6812841126000001, 2.1877873178],\n",
       " [0.7850819055840002, 2.70677628272],\n",
       " [0.8130955608737601, 2.76280359329952],\n",
       " [0.9023365693320273, 2.8520446017577874],\n",
       " [0.9877518655859734, 3.1082904905196256],\n",
       " [1.0025427273093286, 3.1674539374130464]]"
      ]
     },
     "execution_count": 732,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "g_list[:10]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 733,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[67.930032,\n",
       " 62.8995446344,\n",
       " 58.14022654092305,\n",
       " 46.82333670559799,\n",
       " 36.16148892760716,\n",
       " 24.15138598599122,\n",
       " 22.94801374907545,\n",
       " 20.862879883335516,\n",
       " 16.506398586005982,\n",
       " 15.646412165528853]"
      ]
     },
     "execution_count": 733,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "cost[:10]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 734,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(100, 100)"
      ]
     },
     "execution_count": 734,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "len(g_list),len(cost)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 735,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "6.660850151832605"
      ]
     },
     "execution_count": 735,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "computeCost(X, y, g)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 736,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1674db81f60>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "fig, ax = plt.subplots(figsize=(12, 8))\n",
    "ax.plot(np.arange(len(cost)), cost, 'r')\n",
    "ax.set_xlabel('迭代次数', fontsize=18)\n",
    "ax.set_ylabel('代价', rotation=0, fontsize=18)\n",
    "ax.set_title('误差和训练Epoch数', fontsize=18)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 737,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\ncxoAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1677ff9c0f0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "fig, ax = plt.subplots(figsize=(12, 8))\n",
    "plt.plot(np.matrix(g_list)[:,0], np.matrix(g_list)[:,1], 'r',marker='o',markersize=10,markerfacecolor='blue',markeredgecolor='blue')\n",
    "ax.set_xlabel('w0', fontsize=18)\n",
    "ax.set_ylabel('w1', rotation=0, fontsize=18)\n",
    "ax.set_title('参数变化', fontsize=18)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Mini-Batch Gradient Descent（小批量梯度下降）"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 738,
   "metadata": {
    "collapsed": true,
    "jupyter": {
     "outputs_hidden": true
    }
   },
   "outputs": [],
   "source": [
    "def miniBatch_gradient_Descent(X, y, w, alpha, iters):\n",
    "    cost = []\n",
    "    w_list = []\n",
    "    batch_size = 2\n",
    "    num_batches = int(len(X)/ batch_size)\n",
    "\n",
    "\n",
    "    for j in range(iters):\n",
    "         # 在双层for循环之间，每个轮次开始分批次迭代之前打乱数据索引顺序\n",
    "        arr = np.arange(len(X))\n",
    "        np.random.shuffle(arr)\n",
    "        X = X[arr]\n",
    "        y = y[arr]\n",
    "\n",
    "        for i in range(num_batches):\n",
    "            x_batch = X[i*batch_size: i*batch_size + batch_size]\n",
    "            y_batch = y[i*batch_size: i*batch_size + batch_size]\n",
    "            gradients = x_batch.T.dot(x_batch.dot(w)-y_batch)\n",
    "            w= w - alpha/batch_size * gradients\n",
    "            w_list.append([w[0,0],w[1,0]])\n",
    "            cost.append(computeCost(X, y, w))\n",
    "\n",
    "    return w,w_list,cost"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 739,
   "metadata": {
    "collapsed": true,
    "jupyter": {
     "outputs_hidden": true
    }
   },
   "outputs": [],
   "source": [
    "iters = 50"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 740,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "matrix([[2.24648294],\n",
       "        [4.07895755]])"
      ]
     },
     "execution_count": 740,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "g, g_list,cost = miniBatch_gradient_Descent(X, y, w, alpha, iters)\n",
    "g"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 741,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[[0.2285, 0.5632],\n",
       " [0.34913500000000003, 0.8701155],\n",
       " [0.44009191750000004, 0.9956255875000001],\n",
       " [0.5753878468875, 1.619718205775],\n",
       " [0.6679438312165, 2.0047204912965624],\n",
       " [0.748146380621921, 2.178120653755942],\n",
       " [0.8478212972030235, 2.485020577349012],\n",
       " [0.9168673640237778, 2.7127192597782797],\n",
       " [0.9991899199924088, 3.034882291055021],\n",
       " [1.0503259635161093, 3.112437548315534]]"
      ]
     },
     "execution_count": 741,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "g_list[:10]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 742,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[96.769444045,\n",
       " 82.30831384776138,\n",
       " 76.26703062118519,\n",
       " 53.01060744585692,\n",
       " 40.98409279380903,\n",
       " 35.86390513738515,\n",
       " 28.126805406413354,\n",
       " 23.211459851584888,\n",
       " 17.47992948304053,\n",
       " 16.14172849425539]"
      ]
     },
     "execution_count": 742,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "cost[:10]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 743,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "6.6288072560500115"
      ]
     },
     "execution_count": 743,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "computeCost(X, y, g)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 744,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(100, 100)"
      ]
     },
     "execution_count": 744,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "len(g_list),len(cost)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 745,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\nNhKvIilJktRqhu0mzJ8PO3bA/fc3XYkkSZJ6yLDdhOHhsrZvW5IkqdUM202YP7+sDduSJEmtZthu\nQj2y7UmSkiRJrWbYboIj25IkSQPBsN0ER7YlSZIGgmG7CZ4gKUmSNBAM202o20gc2ZYkSWo1w3YT\nZs2CoSFHtiVJklrOsN2EiDK6bdiWJElqNcN2U4aHbSORJElqOcN2UxzZliRJaj3DdlMc2ZYkSWo9\nw3ZThocd2ZYkSWo5w3ZT5s93ZFuSJKnlDNtNcWRbkiSp9QzbTZk/HzZtgu3bm65EkiRJPWLYbkp9\nyfYNG5qtQ5IkST1j2G5Kfcl2W0kkSZJay7DdlHpk25MkJUmSWsuw3RRHtiVJklrPsN0UR7YlSZJa\nz7DdlDpsO7ItSZLUWobtpthGIkmS1HqG7abMm1fWtpFIkiS1lmG7KdOmwZw5jmxLkiS1mGG7ScPD\njmxLkiS1mGG7SfPnO7ItSZLUYobtJjmyLUmS1GqG7SYNDzuyLUmS1GKG7SbZRiJJktRqhu0m2UYi\nSZLUaobtJtUj25lNVyJJkqQeMGw3aXgYtm6FBx9suhJJkiT1gGG7SV6yXZIkqdUM200aHi5rw7Yk\nSVIrGbabVI9se5KkJElSKxm2m+TItiRJUqsZtptUh21HtiVJklrJsN0kT5CUJElqNcN2kxzZliRJ\najXDdpMOOgimTHFkW5IkqaUM202KKKPbhm1JkqRWMmw3bf5820gkSZJayrDdNEe2JUmSWsuw3bTh\nYUe2JUmSWsqw3bT58x3ZliRJainDdtMc2ZYkSWotw3bTHNmWJElqLcN204aHYcMG2Lmz6UokSZI0\nzgzbTZs/HzJh48amK5EkSdI4M2w3rb5ku60kkiRJrWPYbtr8+WXtSZKSJEmtY9humiPbkiRJrWXY\nblodth3ZliRJah3DdtPqNhJHtiVJklrHsN0020gkSZJay7DdNNtIJEmSWsuw3bQZM2DmTEe2JUmS\nWsiw3Q/mz3dkW5IkqYUM2/1geNiRbUmSpBbqu7AdEedFxDOr2xdExBUR8dam6+qp4WFHtiVJklqo\nr8J2RDwZWJyZn4mI5wBTM/NU4KiIOLrh8npn/nxHtiVJklqob8J2REwD/h64OSKeDZwBXFTdfTGw\nqqHSes82EkmSpFbqm7ANvBS4Fng38CTgNcCt1X3rgUNHe1BEnBsRV0XEVevWrZuQQsedJ0hKkiS1\n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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1674c9d9940>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "fig, ax = plt.subplots(figsize=(12, 8))\n",
    "ax.plot(np.arange(len(cost)), cost, 'r')\n",
    "ax.set_xlabel('迭代次数', fontsize=18)\n",
    "ax.set_ylabel('代价', rotation=0, fontsize=18)\n",
    "ax.set_title('误差和训练Epoch数', fontsize=18)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 746,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\nBVtq4J0AAAAASUVORK5CYII=\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1674d4a26d8>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "fig, ax = plt.subplots(figsize=(12, 8))\n",
    "plt.plot(np.matrix(g_list)[:,0], np.matrix(g_list)[:,1], 'r',marker='o',markersize=10,markerfacecolor='blue',markeredgecolor='blue')\n",
    "ax.set_xlabel('w0', fontsize=18)\n",
    "ax.set_ylabel('w1', rotation=0, fontsize=18)\n",
    "ax.set_title('参数变化', fontsize=18)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 747,
   "metadata": {
    "collapsed": true,
    "jupyter": {
     "outputs_hidden": true
    }
   },
   "outputs": [],
   "source": [
    "from sklearn.linear_model import SGDRegressor"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 748,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.01"
      ]
     },
     "execution_count": 748,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "alpha"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 749,
   "metadata": {
    "collapsed": true,
    "jupyter": {
     "outputs_hidden": true
    }
   },
   "outputs": [],
   "source": [
    "X = [1,2,3,4,5]\n",
    "y = [12.5,9,18,14.9,22]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 750,
   "metadata": {
    "collapsed": true,
    "jupyter": {
     "outputs_hidden": true
    }
   },
   "outputs": [],
   "source": [
    "X = np.matrix(X).T\n",
    "y = np.matrix(y).T"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 751,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(matrix([[1],\n",
       "         [2],\n",
       "         [3],\n",
       "         [4],\n",
       "         [5]]), matrix([[12.5],\n",
       "         [ 9. ],\n",
       "         [18. ],\n",
       "         [14.9],\n",
       "         [22. ]]))"
      ]
     },
     "execution_count": 751,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "X,y"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 752,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\weihuimei\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\validation.py:547: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().\n",
      "  y = column_or_1d(y, warn=True)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "SGDRegressor(alpha=0.01, average=False, epsilon=0.1, eta0=0.01,\n",
       "       fit_intercept=True, l1_ratio=0.15, learning_rate='invscaling',\n",
       "       loss='squared_loss', max_iter=10000, n_iter=None, penalty='l2',\n",
       "       power_t=0.25, random_state=None, shuffle=True, tol=None, verbose=0,\n",
       "       warm_start=False)"
      ]
     },
     "execution_count": 752,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "clf = SGDRegressor(loss='squared_loss',alpha=alpha,max_iter=10000)\n",
    "clf.fit(X, y)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 753,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([2.48320938])"
      ]
     },
     "execution_count": 753,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "clf.coef_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 754,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([7.83170353])"
      ]
     },
     "execution_count": 754,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "clf.intercept_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 755,
   "metadata": {
    "collapsed": true,
    "jupyter": {
     "outputs_hidden": true
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'alpha': 0.01,\n",
       " 'average': False,\n",
       " 'epsilon': 0.1,\n",
       " 'eta0': 0.01,\n",
       " 'fit_intercept': True,\n",
       " 'l1_ratio': 0.15,\n",
       " 'learning_rate': 'invscaling',\n",
       " 'loss': 'squared_loss',\n",
       " 'max_iter': 10000,\n",
       " 'n_iter': None,\n",
       " 'penalty': 'l2',\n",
       " 'power_t': 0.25,\n",
       " 'random_state': None,\n",
       " 'shuffle': True,\n",
       " 'tol': None,\n",
       " 'verbose': 0,\n",
       " 'warm_start': False}"
      ]
     },
     "execution_count": 755,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "clf.get_params()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "'C:\\\\Users\\\\AD\\\\机器学习-课程代码'"
      ]
     },
     "execution_count": 1,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import os\n",
    "os.getcwd()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.11.7"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
